'''
面向对象编程 
Object Oriented Programming —— OOP
'''

# 对象 ：包含了数据以及处理数据的函数

'''面向过程'''
# 学生数据
s1 = {'name':'Tom','age':22,'gender':'M'}
s2 = {'name':'Julia','age':20,'gender':'F'}

# 处理数据的函数
def show(stu):
    print('%s:%d:%s'%(stu['name'],stu['age'],stu['gender']))

show(s1)
show(s2)


'''面向对象'''
# 1.创建学生类
# class 类  Student: 类名
class Student:

    # 方法-
    # __init__()称为构造方法，用于给属性传值
    # 类中的方法的第一个参数必须是self，不需要手动传参，由系统自动传参
    def __init__(self,name,age,gender):
        # 方法的参数就是局部变量
        # 属性
        # self.name是成员变量 - 它的作用范围是在整个类中
        self.name = name
        self.age = age
        self.gender = gender

    def show(self):
        print('%s:%d:%s'%(self.name,self.age,self.gender))

# 2.创建学生对象
s3 = Student('tom',22,'M') # 调用构造方法
# 对象s3中包含了数据
print(s3.name)
print(s3.age)
print(s3.gender)
# 对象s3中包含了处理数据的方法
s3.show()

s4 = Student('mike',23,'M')
s4.show()

'''
类与实例
    类(class)是抽象的模板，用于创建对象
    实例(instance)是就是类创建出来的一个一个的具体的对象

    类就是一个数据类型(-自定义类型)
        上面创建的对象s3,s4就是Student类型(就好像4是int类型)
'''

# Dog
class Dog:

    def __init__(self,name,breed,color):
        self.name = name
        self.breed = breed
        self.color = color

    def bark(self):
        print('%s正在对着陌生人狂叫...'%self.name)

    def show(self):
        print('%s:%s:%s'%(self.name,self.breed,self.color))

# 实例化 - 创建类的实例的过程也称为 实例化
dog = Dog('旺财','苏格兰牧羊犬','黄白')
dog.bark()
dog.show()